unp代码相关修正

1

tcpservpoll01.c:13: error: ‘OPEN_MAX’ undeclared (first use in this function)

OPEN_MAX 在 /usr/inlude/limits.h 已经不存在了

猜测:

/usr/include/linux/fd.h/usr/include/linux/limit.h里的 NR_OPEN 就是作者所说的 OPEN_MAX

Solution 1: OPEN_MAX --> NR_OPEN, 连 #include 这句都不用更改

Solution 2: 在 unp.h 里面手动添加 #define OPEN_MAX 1024, 这个 1024 从上面所说 NR_OPEN 的值得到,

2

tcpservpoll01.c:28: error: ‘POLLRDNORM’ undeclared

原因:

usr/include/sys/poll.h里使用了feature.h,必须在任何使用 feature.h 的文件之前有 #define __XOPEN_SOURCE 的语句

usr/include/sys/poll.h 缺少如下语句:

#ifdef __USE_XOPEN
/* These values are defined in XPG4.2.  */
# define POLLRDNORM     0x040           /* Normal data may be read.  */
# define POLLRDBAND     0x080           /* Priority data may be read.  */
# define POLLWRNORM     0x100           /* Writing now will not block.  */
# define POLLWRBAND     0x200           /* Priority data may be written.  */
#endif

据闻:64位的相关文件里面是有定义的,而32位的Linux里面没有此相关定义。

我的poll.h里是有相关定义的,但是引用编译时仍然会报错。

Solution :在 unp.h 里面自己定义这些东西,否则,就是编译内核的时候添加 _XOPEN_SOURCE 选项了

我的解决办法:将.c文件改成.cc文件,使用g++编译成功